/*
 * This file contains stuff needed to be as compatible to Informix as possible.
 * src/interfaces/ecpg/include/ecpg_informix.h
 */
#ifndef _ECPG_INFORMIX_H
#define _ECPG_INFORMIX_H

#include <ecpglib.h>
#include <pgtypes_date.h>
#include <pgtypes_interval.h>
#include <pgtypes_numeric.h>
#include <pgtypes_timestamp.h>

#define SQLNOTFOUND 100

#define ECPG_INFORMIX_NUM_OVERFLOW -1200
#define ECPG_INFORMIX_NUM_UNDERFLOW -1201
#define ECPG_INFORMIX_DIVIDE_ZERO -1202
#define ECPG_INFORMIX_BAD_YEAR -1204
#define ECPG_INFORMIX_BAD_MONTH -1205
#define ECPG_INFORMIX_BAD_DAY -1206
#define ECPG_INFORMIX_ENOSHORTDATE -1209
#define ECPG_INFORMIX_DATE_CONVERT -1210
#define ECPG_INFORMIX_OUT_OF_MEMORY -1211
#define ECPG_INFORMIX_ENOTDMY -1212
#define ECPG_INFORMIX_BAD_NUMERIC -1213
#define ECPG_INFORMIX_BAD_EXPONENT -1216
#define ECPG_INFORMIX_BAD_DATE -1218
#define ECPG_INFORMIX_EXTRA_CHARS -1264

#ifdef __cplusplus
extern "C" {
#endif

extern int rdatestr(date, char*);
extern void rtoday(date*);
extern int rjulmdy(date, short*);
extern int rdefmtdate(date*, char*, char*);
extern int rfmtdate(date, char*, char*);
extern int rmdyjul(short*, date*);
extern int rstrdate(char*, date*);
extern int rdayofweek(date);

extern int rfmtlong(long, char*, char*);
extern int rgetmsg(int, char*, int);
extern int risnull(int, char*);
extern int rsetnull(int, char*);
extern int rtypalign(int, int);
extern int rtypmsize(int, int);
extern int rtypwidth(int, int);
extern void rupshift(char*);

extern int byleng(char*, int);
extern void ldchar(char*, int, char*);

extern void ECPG_informix_set_var(int, void*, int);
extern void* ECPG_informix_get_var(int);
extern void ECPG_informix_reset_sqlca(void);

/* Informix defines these in decimal.h */
int decadd(decimal*, decimal*, decimal*);
int deccmp(decimal*, decimal*);
void deccopy(decimal*, decimal*);
int deccvasc(char*, int, decimal*);
int deccvdbl(double, decimal*);
int deccvint(int, decimal*);
int deccvlong(long, decimal*);
int decdiv(decimal*, decimal*, decimal*);
int decmul(decimal*, decimal*, decimal*);
int decsub(decimal*, decimal*, decimal*);
int dectoasc(decimal*, char*, int, int);
int dectodbl(decimal*, double*);
int dectoint(decimal*, int*);
int dectolong(decimal*, long*);

/* Informix defines these in datetime.h */
extern void dtcurrent(timestamp*);
extern int dtcvasc(char*, timestamp*);
extern int dtsub(timestamp*, timestamp*, interval*);
extern int dttoasc(timestamp*, char*);
extern int dttofmtasc(timestamp*, char*, int, char*);
extern int intoasc(interval*, char*);
extern int dtcvfmtasc(char*, char*, timestamp*);

#ifdef __cplusplus
}
#endif

#endif /* ndef _ECPG_INFORMIX_H */
